// routes/users.js 使用的中间件
// 导入用户 db
const { PersonModel } = require('../db/model')

// 用户注册
const testRegister = (req, res, next) => {
  // 1. 拿到用户传递来的 参数
  const { username, password, nickname } = req.body

  // 2. 非空验证(保证前端必须要传递了这个参数)
  if (!username || !password || !nickname) return next(4)

  // 3. 参数的格式验证(正则验证)
  // 暂时简单验证一个长度, 将来学完了正则, 你们自己回来补上
  if (username.length < 5 || username.length > 12 || password.length < 5 || password.length > 12 || nickname.length < 2 || nickname.length > 6) return next(5)

  next()
}

// 用户登录
const testLogin = (req, res, next) => {
  // 1. 拿到用户传递来的 参数
  const { username, password } = req.body

  // 2. 非空验证(保证前端必须要传递了这个参数)
  if (!username || !password) return next(4)

  // 3. 参数的格式验证(正则验证)
  // 暂时简单验证一个长度, 将来学完了正则, 你们自己回来补上
  if (username.length < 5 || username.length > 12 || password.length < 5 || password.length > 12) return next(5)

  next()
}

// 获取用户信息
const getUserDetails = async (req, res, next) => {
  // 拿到 session 空间内是否有信息
  const { info } = req.session
  if (!info) return next()

  // 拿到用户 id, 并去数据库查找
  const { id } = info
  const userInfo = await PersonModel.findOne({ _id: id })
  // 存储到 req 上
  req.userInfo = userInfo
  next()
}

// 获取用户 id
const getUserId = (req, res, next) => {
  const { info } = req.session
  if (!info) return next(6)
  req.userId = info.id
  next()
} 

// 用户注册
const testUpdate = (req, res, next) => {
  // 1. 拿到用户传递来的 参数
  const { nickname, desc } = req.body

  // 2. 非空验证(保证前端必须要传递了这个参数)
  if (!nickname) return next(4)
  // 3. 参数的格式验证(正则验证)
  // 暂时简单验证一个长度, 将来学完了正则, 你们自己回来补上
  if (nickname.length < 2 || nickname.length > 6 || desc.length > 200) return next(5)
  // 4. 拼接头像路径
  if (req.file) {
    const avatar = '/public/avatar/' + req.file.filename
    req.body.avatar = avatar
  }
  next()
}

module.exports = {
  testRegister,
  testLogin,
  getUserDetails,
  testUpdate,
  getUserId
}
